<template>
  <div class="relative">
    <app-settings-content :header-text="$strings.HeaderCustomMetadataProviders">
      <template #header-prefix>
        <nuxt-link to="/config/item-metadata-utils" class="w-8 h-8 flex items-center justify-center rounded-full cursor-pointer hover:bg-white hover:bg-opacity-10 text-center mr-2">
          <span class="material-symbols text-2xl">arrow_back</span>
        </nuxt-link>
      </template>
      <template #header-items>
        <ui-tooltip :text="$strings.LabelClickForMoreInfo" class="inline-flex ml-2">
          <a href="https://www.audiobookshelf.org/guides/custom-metadata-providers" target="_blank" class="inline-flex">
            <span class="material-symbols text-xl w-5 text-gray-200">help_outline</span>
          </a>
        </ui-tooltip>
        <div class="flex-grow" />

        <ui-btn color="primary" small @click="setShowAddModal">{{ $strings.ButtonAdd }}</ui-btn>
      </template>

      <tables-custom-metadata-provider-table :providers="providers" :processing.sync="processing" class="pt-2" @removed="providerRemoved" />
      <modals-add-custom-metadata-provider-modal ref="addModal" v-model="showAddModal" @added="providerAdded" />
    </app-settings-content>
  </div>
</template>

<script>
export default {
  async asyncData({ store, redirect }) {
    if (!store.getters['user/getIsAdminOrUp']) {
      redirect('/')
      return
    }
    return {}
  },
  data() {
    return {
      showAddModal: false,
      processing: false,
      providers: []
    }
  },
  methods: {
    providerRemoved(providerId) {
      this.providers = this.providers.filter((p) => p.id !== providerId)
    },
    providerAdded(provider) {
      this.providers.push(provider)
    },
    setShowAddModal() {
      this.showAddModal = true
    },
    loadProviders() {
      this.processing = true
      this.$axios
        .$get('/api/custom-metadata-providers')
        .then((res) => {
          this.providers = res.providers
        })
        .catch((error) => {
          console.error('Failed', error)
          this.$toast.error(this.$strings.ToastFailedToLoadData)
        })
        .finally(() => {
          this.processing = false
        })
    }
  },
  mounted() {
    this.loadProviders()
  }
}
</script>

<style></style>
